home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
kowin
/
archive
/
apl
/
tvv132.lzh
/
symbol.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-16
|
2KB
|
106 lines
/* Copyright 1995 Ogasawara Hiroyuki (COR.) */
#include <corlib.h>
#include <HS_wlib.h>
#define HLINE 480
#define VLINE 24
#define LINEBUF (HLINE*VLINE)
#define LINESIZE (LINEBUF/8)
static int Shadow();
static unsigned char buf1[LINESIZE*3/2],
buf2[LINESIZE*3/2];
static Sheet SB[10],
*Sp;
static int Offset;
Sheet *
SheetShadow( msg, attr, font )
char *msg;
{
Sheet *sp;
if( Offset >= LINESIZE || Sp >= SB+10 ){
ShadowInit();
return 0;
}
sp= WindowSetFontAddress( (attr<<8)+font, msg );
Sp->buf1= (short*)(buf1+Offset);
Sp->buf2= (short*)(buf2+Offset);
Offset+= Shadow( Sp, sp, strlen(msg)*font/2, font );
return Sp++;
}
ShadowInit()
{
Sp= SB;
Offset= 0;
}
static int
Shadow()
{
asm( "
movem.l 4(sp),a0-a1 *ssp,sp
movem.l 12(sp),d0-d1 *h,v
movem.l d3-d4/a3-a4,-(sp)
move.l d0,(a0)+ * h
move.l d1,(a0)+ * v
addq.l #8,d0 * h+= 8
addq.l #7,d0 * h+= 7 (+15)
lsr.l #4,d0 * h>>= 4
move.l d0,(a0)+ * hword
move.l d0,d4
move.l (a0)+,a2 * ap= ssp->buf1
move.l (a0),a3 * bp= ssp->buf2
move.l 12(a1),a1 * fp= sp->buf1
move.l a1,a4
* first line
move.l d4,d3
subq.l #1,d3
_1_line:
move.w (a1)+,d0 * f0= *fp++
move.w d0,d2
not.w d2 * f1= ~f0
move.w d2,(a2)+ * *bp++= f1
roxr.w #1,d0
and.w d2,d0
move.w d0,(a3)+ * *ap++= (f0>>1)&f1
dbra d3,_1_line
* 2nd .. 23th line
subq.l #2,d1 * v-2
shadow_loop:
add.w #1024/8,a4
move.l a4,a1
* add.w #1024/8-48/8,a1 * fp+= sp->hword-hw
move.l d4,d3
subq.l #1,d3
_2_line:
move.w (a1)+,d0 * f0= *fp++
move.w d0,d2
not.w d2 * f1= ~f0
move.w d2,(a2)+ * *bp++= f1
or.w -1024/8-2(a1),d0 * f0|= b0
roxr.w #1,d0
and.w d2,d0
move.w d0,(a3)+ * *ap++= (f0>>1)&f1
dbra d3,_2_line
dbra d1,shadow_loop
* move.l a3,(a0)
* move.l a2,-(a0)
sub.l (a0),a3
move.l a3,d0
movem.l (sp)+,d3-d4/a3-a4
" );
}